﻿
using Newtonsoft.Json;
using System.Collections.Generic;

namespace Onetube.Entities.RecentUploadedVideosQueryResult
{
    public class Id
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class Updated
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class Category
    {
        [JsonProperty("scheme")]
        public string Scheme { get; set; }

        [JsonProperty("term")]
        public string Term { get; set; }
    }

    public class Title
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class Logo
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class Link
    {
        [JsonProperty("rel")]
        public string Rel { get; set; }

        [JsonProperty("type")]
        public string Type { get; set; }

        [JsonProperty("href")]
        public string Href { get; set; }
    }

    public class Name
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class Uri
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class Author
    {
        [JsonProperty("name")]
        public Name Name { get; set; }

        [JsonProperty("uri")]
        public Uri Uri { get; set; }
    }

    public class Generator
    {
        [JsonProperty("$t")]
        public string T { get; set; }

        [JsonProperty("version")]
        public string Version { get; set; }

        [JsonProperty("uri")]
        public string Uri { get; set; }
    }

    public class OpenSearchTotalResults
    {
        [JsonProperty("$t")]
        public int T { get; set; }
    }

    public class OpenSearchStartIndex
    {
        [JsonProperty("$t")]
        public int T { get; set; }
    }

    public class OpenSearchItemsPerPage
    {
        [JsonProperty("$t")]
        public int T { get; set; }
    }

    public class Id2
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class Published
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class Updated2
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class Category2
    {
        [JsonProperty("scheme")]
        public string Scheme { get; set; }

        [JsonProperty("term")]
        public string Term { get; set; }

        [JsonProperty("label")]
        public string Label { get; set; }
    }

    public class Title2
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class Content
    {
        [JsonProperty("type")]
        public string Type { get; set; }

        [JsonProperty("src")]
        public string Src { get; set; }
    }

    public class Link2
    {
        [JsonProperty("rel")]
        public string Rel { get; set; }

        [JsonProperty("type")]
        public string Type { get; set; }

        [JsonProperty("href")]
        public string Href { get; set; }
    }

    public class Name2
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class Uri2
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class YtUserId
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class Author2
    {
        [JsonProperty("name")]
        public Name2 Name { get; set; }

        [JsonProperty("uri")]
        public Uri2 Uri { get; set; }

        [JsonProperty("yt$userId")]
        public YtUserId YtUserId { get; set; }
    }

    public class YtAccessControl
    {
        [JsonProperty("action")]
        public string Action { get; set; }

        [JsonProperty("permission")]
        public string Permission { get; set; }
    }

    public class GdFeedLink
    {
        [JsonProperty("rel")]
        public string Rel { get; set; }

        [JsonProperty("href")]
        public string Href { get; set; }

        [JsonProperty("countHint")]
        public int CountHint { get; set; }
    }

    public class GdComments
    {
        [JsonProperty("gd$feedLink")]
        public GdFeedLink GdFeedLink { get; set; }
    }

    public class YtHd
    {
    }

    public class MediaCategory
    {
        [JsonProperty("$t")]
        public string T { get; set; }

        [JsonProperty("label")]
        public string Label { get; set; }

        [JsonProperty("scheme")]
        public string Scheme { get; set; }
    }

    public class MediaContent
    {
        [JsonProperty("url")]
        public string Url { get; set; }

        [JsonProperty("type")]
        public string Type { get; set; }

        [JsonProperty("medium")]
        public string Medium { get; set; }

        [JsonProperty("isDefault")]
        public string IsDefault { get; set; }

        [JsonProperty("expression")]
        public string Expression { get; set; }

        [JsonProperty("duration")]
        public int Duration { get; set; }

        [JsonProperty("yt$format")]
        public int YtFormat { get; set; }
    }

    public class MediaCredit
    {
        [JsonProperty("$t")]
        public string T { get; set; }

        [JsonProperty("role")]
        public string Role { get; set; }

        [JsonProperty("scheme")]
        public string Scheme { get; set; }

        [JsonProperty("yt$display")]
        public string YtDisplay { get; set; }

        [JsonProperty("yt$type")]
        public string YtType { get; set; }
    }

    public class MediaDescription
    {
        [JsonProperty("$t")]
        public string T { get; set; }

        [JsonProperty("type")]
        public string Type { get; set; }
    }

    public class MediaKeywords
    {
    }

    public class MediaLicense
    {
        [JsonProperty("$t")]
        public string T { get; set; }

        [JsonProperty("type")]
        public string Type { get; set; }

        [JsonProperty("href")]
        public string Href { get; set; }
    }

    public class MediaPlayer
    {
        [JsonProperty("url")]
        public string Url { get; set; }
    }

    public class MediaRestriction
    {
        [JsonProperty("$t")]
        public string T { get; set; }

        [JsonProperty("type")]
        public string Type { get; set; }

        [JsonProperty("relationship")]
        public string Relationship { get; set; }
    }

    public class MediaThumbnail
    {
        [JsonProperty("url")]
        public string Url { get; set; }

        [JsonProperty("height")]
        public int Height { get; set; }

        [JsonProperty("width")]
        public int Width { get; set; }

        [JsonProperty("time")]
        public string Time { get; set; }

        [JsonProperty("yt$name")]
        public string YtName { get; set; }
    }

    public class MediaTitle
    {
        [JsonProperty("$t")]
        public string T { get; set; }

        [JsonProperty("type")]
        public string Type { get; set; }
    }

    public class YtAspectRatio
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class YtDuration
    {
        [JsonProperty("seconds")]
        public string Seconds { get; set; }
    }

    public class YtUploaded
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class YtUploaderId
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class YtVideoid
    {
        [JsonProperty("$t")]
        public string T { get; set; }
    }

    public class MediaGroup
    {
        [JsonProperty("media$category")]
        public MediaCategory[] MediaCategory { get; set; }

        [JsonProperty("media$content")]
        public MediaContent[] MediaContent { get; set; }

        [JsonProperty("media$credit")]
        public MediaCredit[] MediaCredit { get; set; }

        [JsonProperty("media$description")]
        public MediaDescription MediaDescription { get; set; }

        [JsonProperty("media$keywords")]
        public MediaKeywords MediaKeywords { get; set; }

        [JsonProperty("media$license")]
        public MediaLicense MediaLicense { get; set; }

        [JsonProperty("media$player")]
        public MediaPlayer MediaPlayer { get; set; }

        [JsonProperty("media$restriction")]
        public MediaRestriction[] MediaRestriction { get; set; }

        [JsonProperty("media$thumbnail")]
        public MediaThumbnail[] MediaThumbnail { get; set; }

        [JsonProperty("media$title")]
        public MediaTitle MediaTitle { get; set; }

        [JsonProperty("yt$aspectRatio")]
        public YtAspectRatio YtAspectRatio { get; set; }

        [JsonProperty("yt$duration")]
        public YtDuration YtDuration { get; set; }

        [JsonProperty("yt$uploaded")]
        public YtUploaded YtUploaded { get; set; }

        [JsonProperty("yt$uploaderId")]
        public YtUploaderId YtUploaderId { get; set; }

        [JsonProperty("yt$videoid")]
        public YtVideoid YtVideoid { get; set; }
    }

    public class GdRating
    {
        [JsonProperty("average")]
        public double Average { get; set; }

        [JsonProperty("max")]
        public int Max { get; set; }

        [JsonProperty("min")]
        public int Min { get; set; }

        [JsonProperty("numRaters")]
        public int NumRaters { get; set; }

        [JsonProperty("rel")]
        public string Rel { get; set; }
    }

    public class YtStatistics
    {
        [JsonProperty("favoriteCount")]
        public string FavoriteCount { get; set; }

        [JsonProperty("viewCount")]
        public string ViewCount { get; set; }
    }

    public class YtRating
    {
        [JsonProperty("numDislikes")]
        public string NumDislikes { get; set; }

        [JsonProperty("numLikes")]
        public string NumLikes { get; set; }
    }

    public class Entry
    {
        [JsonProperty("gd$etag")]
        public string GdEtag { get; set; }

        [JsonProperty("id")]
        public Id2 Id { get; set; }

        [JsonProperty("published")]
        public Published Published { get; set; }

        [JsonProperty("updated")]
        public Updated2 Updated { get; set; }

        [JsonProperty("category")]
        public Category2[] Category { get; set; }

        [JsonProperty("title")]
        public Title2 Title { get; set; }

        [JsonProperty("content")]
        public Content Content { get; set; }

        [JsonProperty("link")]
        public Link2[] Link { get; set; }

        [JsonProperty("author")]
        public Author2[] Author { get; set; }

        [JsonProperty("yt$accessControl")]
        public YtAccessControl[] YtAccessControl { get; set; }

        [JsonProperty("gd$comments")]
        public GdComments GdComments { get; set; }

        [JsonProperty("yt$hd")]
        public YtHd YtHd { get; set; }

        [JsonProperty("media$group")]
        public MediaGroup MediaGroup { get; set; }

        [JsonProperty("gd$rating")]
        public GdRating GdRating { get; set; }

        [JsonProperty("yt$statistics")]
        public YtStatistics YtStatistics { get; set; }

        [JsonProperty("yt$rating")]
        public YtRating YtRating { get; set; }
    }

    public class Feed
    {
        [JsonProperty("xmlns")]
        public string Xmlns { get; set; }

        [JsonProperty("xmlns$media")]
        public string XmlnsMedia { get; set; }

        [JsonProperty("xmlns$openSearch")]
        public string XmlnsOpenSearch { get; set; }

        [JsonProperty("xmlns$gd")]
        public string XmlnsGd { get; set; }

        [JsonProperty("xmlns$yt")]
        public string XmlnsYt { get; set; }

        [JsonProperty("gd$etag")]
        public string GdEtag { get; set; }

        [JsonProperty("id")]
        public Id Id { get; set; }

        [JsonProperty("updated")]
        public Updated Updated { get; set; }

        [JsonProperty("category")]
        public Category[] Category { get; set; }

        [JsonProperty("title")]
        public Title Title { get; set; }

        [JsonProperty("logo")]
        public Logo Logo { get; set; }

        [JsonProperty("link")]
        public Link[] Link { get; set; }

        [JsonProperty("author")]
        public Author[] Author { get; set; }

        [JsonProperty("generator")]
        public Generator Generator { get; set; }

        [JsonProperty("openSearch$totalResults")]
        public OpenSearchTotalResults OpenSearchTotalResults { get; set; }

        [JsonProperty("openSearch$startIndex")]
        public OpenSearchStartIndex OpenSearchStartIndex { get; set; }

        [JsonProperty("openSearch$itemsPerPage")]
        public OpenSearchItemsPerPage OpenSearchItemsPerPage { get; set; }

        [JsonProperty("entry")]
        public List<Entry> Entry { get; set; }
    }

    public class RecentUploadedVideosQueryResult
    {
        [JsonProperty("version")]
        public string Version { get; set; }

        [JsonProperty("encoding")]
        public string Encoding { get; set; }

        [JsonProperty("feed")]
        public Feed Feed { get; set; }
    }
}